package dao

import (
	"time"
)

// 这是 Topic 的全局公开dao对象，被service层调用!
var TopicDao = topicDao{}

// 专题表
// 这是 topic表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Topic struct {
	Id         int32     `json:"id" form:"id" v:"id" db:"id"`
	Title      string    `json:"title" form:"title" v:"title" db:"title"`                         // 专题标题
	Subtitle   string    `json:"subtitle" form:"subtitle" v:"subtitle" db:"subtitle"`             // 专题子标题
	Content    string    `json:"content" form:"content" v:"content" db:"content"`                 // 专题内容，富文本格式
	Price      float64   `json:"price" form:"price" v:"price" db:"price"`                         // 专题相关商品最低价
	ReadCount  string    `json:"read_count" form:"read_count" v:"read_count" db:"read_count"`     // 专题阅读量
	PicUrl     string    `json:"pic_url" form:"pic_url" v:"pic_url" db:"pic_url"`                 // 专题图片
	SortOrder  int32     `json:"sort_order" form:"sort_order" v:"sort_order" db:"sort_order"`     // 排序
	Goods      string    `json:"goods" form:"goods" v:"goods" db:"goods"`                         // 专题相关商品，采用JSON数组格式
	AddTime    time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`             // 创建时间
	UpdateTime time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"` // 更新时间
	Deleted    int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`    // 逻辑删除

}

// 注意:这是 Topic 的私有dao对象，只能在dao层内使用!
type topicDao struct {
	InsertTemplate func(arg Topic) (int64, error)       //插入一条记录
	UpdateTemplate func(arg Topic) (int64, error)       //更新一条记录
	DeleteTemplate func(id int64) (int64, error)        `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Topic, error)        `args:"id"` //根据传入的主键获取一条记录
	List           func(arg TopicList) ([]Topic, error) //模糊分页查询
}

/*
// 这是 topic 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type TopicPostman struct {
id
title
subtitle
content
price
read_count
pic_url
sort_order
goods
add_time
update_time
deleted

}*/

// 这是 topic 表的批量请求参数
type TopicReq struct {
	List []Topic `json:"list" form:"list"`
}

// 这是 topicDao.List()方法的请求参数
type TopicList struct {
	Page
}
